<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>01.函数执行的代理拦截</title>
    </head>
    <body>
        <script>
            /**
             * 1.做一个拦截器Proxy，用来拦截对象进行一些逻辑处理，
             * 注意这个Proxy拦截器目前只在火狐浏览器下实现了兼容
             * IE、Google、Safari、Opera都暂不支持，稍微注意下
             * 2.let proxy = new Proxy();有两个参数，如下
             * 1).第一个参数是需要被代理的对象
             * 2).第二个参数是代理的一些配置方法
             */
             /**
              * 1.普通函数的运行拦截
              * 2.通过new的方式创建的类似面向对象的函数的运行拦截
              */
             // 先来看看普通函数的运行拦截
             function testFn () {
                 console.log('hello allen!');
             }

             var fnProxy = new Proxy (testFn, {
                 apply (target, context, arguments) {
                     // 在这里可以加入任意的拦截逻辑代码，我这里就简单打印一下
                     console.log('this is a ordinary function');
                     return Reflect.apply(target, context, arguments);
                 }
             });

             /**
              * 可以有以下三种调用方式
              * 三种方式调用返回的结果都是一样的
              */
             fnProxy ();
             fnProxy.call (null);
             fnProxy.apply (null);
        </script>
    </body>
</html>
